package generator.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.github.davidfantasy.jwtshiro.JWTHelper;
import com.github.davidfantasy.jwtshiro.annotation.AlowAnonymous;
import generator.StuVo.StuVo;
import generator.biz.StuBizImpl;
import generator.mapper.Addr;
import generator.mapper.Stu;
import generator.service.AddrService;
import generator.service.StuService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@Slf4j
public class HelloController {

    @Autowired(required = false)
    private StuService stuService;
    @Autowired
    private AddrService addrService;
    @Autowired
    private StuBizImpl stuBiz;


    @GetMapping("/")
    public String index() {
        return "a";
    }

    /**
     * 查询所有用户
     * @return
     */
    @GetMapping("/Stus")
    public List<Stu> getStu() {
        return stuService.list();
    }

    /**
     * 根据姓名查询用户
     * @param name
     * @return
     */
    @GetMapping("/getStuByName")
    public List<Stu> getStuByName(String name){
        return stuService.list(new LambdaQueryWrapper<Stu>().eq(Stu::getName,name));
    }

    /**
     * 根据id查询用户
     * @param id
     * @return
     */
    @GetMapping("/getStuById")
    public Stu getStuById(Integer id){
        return stuService.getById(id);
    }

    /**
     * 新增用户
     * @param stu
     */
    @PostMapping("/insert")
    public void insert(@RequestBody Stu stu){
        if(StringUtils.isEmpty(stu.getName()) ){
            return;
        }
        stuBiz.addUser(stu);
    }

    /**
     * 根据姓名修改用户
     * @param stu
     */
    @PostMapping("/update")
    public void updateUserByName(@RequestBody Stu stu){
        stuBiz.updateUserByName(stu);
    }

    /**
     * 根据id删除用户
     * @param id
     */
    @DeleteMapping("/deleteById")
    public void deleteById(Integer id){
        stuBiz.deleteById(id);
    }

    /**
     * 根据id查询用户信息
     * @param id
     * @return
     */
    @GetMapping("/getStuVoById")
    public StuVo getStuVoById(Integer id){
        return stuBiz.getStuVoById(id);
    }

    /**+
     * 新增用户信息
     * @param stuVo
     */
    @PostMapping("/addStuVo")
    public void addStuVo(@RequestBody StuVo stuVo){
        stuBiz.addStuInfo(stuVo);
    }

    /**
     * 根据id删除用户信息
     * @param id
     */
    @DeleteMapping("/deleteStuVoById")
    public void deleteVoById(Integer id){
        stuBiz.deleteVoById(id);
    }

    /**
     * 根据id修改用户信息
     * @param stuVo
     */
    @PostMapping("/updateStuVoById")
    public void updateStuVoById(@RequestBody StuVo stuVo){
        stuBiz.updateStuVoById(stuVo);
    }

    /**
     * 查询所有地址
     * @return
     */
    @GetMapping("/getAddr")
    public List<Addr> getAddr(){
        return addrService.list();
    }

    @GetMapping("/getStuVoWithRedis")
    public StuVo getStuVoWithRedis(Integer id){
        return stuBiz.getStuVo0WithRedis(id);
    }

    @Autowired
    private JWTHelper jwtHelper;

    @GetMapping("/getStuVoWithAccount")
    public StuVo getStuVoWithAddr(String addr){
        return stuBiz.getStuVoWithAddr(addr);
    }

    @AlowAnonymous
    @GetMapping("/login")
    public JsonResult login(String address, String stuName){
        boolean b = stuBiz.checkAddr(address, stuName);
        if(!b){
            return JsonResult.fail("登录失败");
        }
        String token = jwtHelper.sign(stuName, address);
        return JsonResult.success(token);
    }
}
